package com.easybbs.component;

import cn.dev33.satoken.stp.StpInterface;
import cn.dev33.satoken.stp.StpUtil;
import com.easybbs.entity.enums.ResponseCodeEnum;
import com.easybbs.entity.po.UserInfo;
import com.easybbs.exception.BusinessException;
import com.easybbs.service.UserInfoService;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author: yudaxian
 * @Description: sa-token 自定义鉴权
 * @DateTime: 2024/10/18 9:44
 **/
@Component
public class PermissionCheckComponent implements StpInterface {

    @Resource
    private UserInfoService userInfoService;

    /**
     * 返回一个账号所拥有的权限码集合 （本项目中暂时不做权限校验，所以返回一个空集合）
     */
    @Override
    public List<String> getPermissionList(Object loginId, String loginType) {
        return List.of();
    }

    /**
     * 返回一个账号所拥有的角色标识集合 (权限与角色可分开校验)
     */
    @Override
    public List<String> getRoleList(Object loginId, String loginType) {
        String loginIdStr = String.valueOf(loginId);
        UserInfo userInfo = userInfoService.getUserInfoByUserId(loginIdStr);
        if (ObjectUtils.isEmpty(userInfo)) {
            // 用户不存在，已经被删除了，需要清除token信息
            StpUtil.logout();
            throw new BusinessException(ResponseCodeEnum.CODE_401);
        }
        List<String> list = new ArrayList<>();
        list.add(userInfo.getRole());
        return list;
    }
}
